26. 删除有序数组中的重复项

26. 删除有序数组中的重复项

Similar Question

leading to the advanced question

Solution Tips

快慢指针去重, 处理特征相同的数组?

快指针跳过相同的元素, 慢指针永远指向可替换的位置

方案一: 快慢指针

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
    // 原数组有序, 原地删除
    // 因为元素相对顺序不变, 所以不可以使用 27 题中的头尾指针的思路了
    // 但是因为现在数组是有序的, 所以使用快慢指针可以不用像 27 题那种挪动后续所有元素?
    // 总之使用快慢指针, 快指针一直挪动, 到下一个不相等的元素
    // 慢指针只有再更新了元素之后才会挪动位置
    let fast = 0;
    let slow = 0;
    while (fast < nums.length && slow < nums.length) {
        if (nums[fast] !== nums[fast - 1]) {
            nums[slow] = nums[fast]
            slow++
        }
        fast++
    }

    return slow;
};